package cn.edu.xjtu.android.emoji_warfare_android.game;

import cn.edu.xjtu.android.emoji_warfare_android.game.hero.Player;

/**
 * Controller<br>
 * 控制器<br>
 * 1.控制玩家移动<br>
 * 用法：<br>
 * 监听画面Touch事件，按下的时候调用down方法；<br>
 * 移动和松开的时候调用move方法；<br>
 * 
 * @author bill wyyf
 *
 */
public class Controller {
	/**
	 * 要控制的玩家
	 */
	public final Player player;
	/**
	 * 按下时手指和Player之间的x距离
	 */
	private float dx;
	/**
	 * 按下时手指和Player之间的y距离
	 */
	private float dy;

	/**
	 * 创建一个控制器，只能由Engine创建
	 * 
	 * @param player
	 *            要控制的玩家
	 */
	/* package */ Controller(Player player) {
		if (player == null) {
			throw new IllegalArgumentException("Player can't be null");
		}
		this.player = player;
	}

	/**
	 * 按下时手指的位置
	 * 
	 * @param x
	 *            手指x坐标
	 * @param y
	 *            手指y坐标
	 */
	public void down(float x, float y) {
		dx = player.basePoint.x - x;
		dy = player.basePoint.y - y;
	}

	/**
	 * 移动时手指的位置
	 * 
	 * @param x
	 *            手指x坐标
	 * @param y
	 *            手指y坐标
	 */
	public void move(float x, float y) {
		// 防止超出边界
		if (x + dx > 1080) {
			dx = 1080 - x;
		} else if (x + dx < 0) {
			dx = -x;
		}
		if (y + dy > 1920) {
			dy = 1920 - y;
		} else if (y + dy < 0) {
			dy = -y;
		}
		player.basePoint.x = x + dx;
		player.basePoint.y = y + dy;
	}

}
